# -*- coding: utf-8  -*-
# @File     : basePage.py
# @author   : Jerry
# @datetime : 2022/3/18 19:14
# @software : PyCharm
from utils.myDriver import Driver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from utils.mySettings import timeout,pollFrequency,domain

class BasePage:
    def __init__(self):
        #获取浏览器对象
        self.driver = Driver.getDriver()

        self.url = domain

    #析构方法
    #def __del__(self):
        #self.driver.close()

    def getElement(self,locator):
        """
        根据表达式匹配单个元素（此方法为 指定单个元素为显示等待）
        :param locator:
        :return:
        """
        #判断元素是否存在
        WebDriverWait(
            #传入浏览器对象
            driver=self.driver,
            #传入超时时间
            timeout=timeout,
            #传入轮询时间
            poll_frequency=pollFrequency
        ).until(
            EC.visibility_of_element_located(
                locator
            )
        )
        #返回显示等待指定的元素对象，元祖传参，用By方法。
        # *locator将这个元祖解包成两个元素，因为By方法需要传两个参数而非一个元祖，
        # 而我们在调用getElement()方法时，传locator是直接传的元祖，元祖适用于EC方法，它需要传元祖。
        #当一个函数里传的一个参数用于多个地方，而这些地方对参数格式要求不同，则此时需要用到解包等处理方式
        return self.driver.find_element(*locator)

    def getElements(self,locator):
        """
        根据表达式匹配元素列表（此方法为 指定元素列表为显示等待）
        :param locator:
        :return:
        """
        #判断元素是否存在
        WebDriverWait(
            #传入浏览器对象
            driver=self.driver,
            #传入超时时间
            timeout=timeout,
            #传入轮询时间
            poll_frequency=pollFrequency
        ).until(
            EC.visibility_of_element_located(
                locator
            )
        )
        #返回显示等待指定的元素对象，元祖传参，用By方法
        return self.driver.find_elements(*locator)